package yiran.agift;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import yiran.agift.lang.LangHelper;

public class GiftEditor {
    private static final int GUI_SIZE = 54;

    /**
     * 打开礼物创建界面的GUI
     * 此方法用于创建并打开一个礼物创建界面，让玩家可以进行礼物的配置和创建
     *
     * @param player 玩家对象，用于确定打开界面的玩家以及获取玩家的库存
     * @param giftName 礼物名称，用于在界面上显示相关信息
     */
    public void openCreationGUI(Player player, String giftName) {
        // 创建一个库存对象，用于显示礼物创建界面
        // 这里的GUI_SIZE代表界面的大小，通常是一个常量，用于定义界面的行数
        // LangHelper.getString("gui.create_title")用于获取国际化支持的界面标题，并替换占位符为实际礼物名称
        Inventory inv = Bukkit.createInventory(
                player,
                GUI_SIZE,
                LangHelper.getString("gui.create_title").replace("%name%", giftName)
        );

        // 打开刚刚创建的界面
        player.openInventory(inv);
    }

    /**
     * 打开编辑礼物的图形界面
     * 此方法用于创建并打开一个供玩家编辑特定礼物内容的图形界面
     * 它根据提供的礼物ID从GiftManager中获取礼物项，并将它们显示在界面上
     *
     * @param player 玩家对象，表示哪个玩家将打开编辑界面
     * @param giftId 礼物ID，表示玩家将要编辑的礼物的唯一标识符
     */
    public void openEditGUI(Player player, int giftId) {
        // 构造图形界面的标题，结合礼物ID以明确指示玩家正在编辑哪个礼物
        String title = LangHelper.getString("gui.edit_title_prefix") + giftId;
        // 创建指定大小和标题的图形界面
        Inventory inv = Bukkit.createInventory(player, GUI_SIZE, title);

        // 从GiftManager中获取指定礼物ID的礼物项数组
        ItemStack[] giftItems = AGift.getInstance().getGiftManager().getGift(giftId);
        // 如果获取到的礼物项数组不为空，则将它们设置为图形界面的内容
        if (giftItems != null) {
            inv.setContents(giftItems);
        }

        // 打开图形界面供玩家编辑礼物内容
        player.openInventory(inv);
    }

    /**
     * 处理礼包的保存操作
     *
     * @param player 玩家对象，用于发送消息和获取玩家信息
     * @param inv    礼包的库存，包含要保存的物品
     * @param giftName 礼包名称，用于创建或编辑礼包
     * @param giftId   礼包ID，用于编辑已有的礼包，如果为-1，则表示创建新的礼包
     */
    public void handleSave(Player player, Inventory inv, String giftName, int giftId) {
        // 获取库存中的所有物品
        ItemStack[] contents = inv.getContents();
        try {
            // 判断giftId是否为-1，如果是，则表示需要创建新的礼包
            if (giftId == -1) {
                // 调用GiftManager的createGift方法创建新的礼包
                int newId = AGift.getInstance().getGiftManager().createGift(giftName, contents);
                // 如果newId不为-1，表示礼包创建成功，发送成功消息给玩家
                if (newId != -1) {
                    player.sendMessage(LangHelper.getString("gift.created_id").replace("%id%", String.valueOf(newId)));
                } else {
                    // 如果newId为-1，表示礼包创建失败，发送失败消息给玩家
                    player.sendMessage(LangHelper.getString("error.create_failed"));
                }
            } else {
                // 如果giftId小于等于0，发送无效ID的错误消息给玩家
                if (giftId <= 0) {
                    player.sendMessage(LangHelper.getString("error.invalid_id"));
                    return;
                }
                // 调用GiftManager的editGift方法编辑已有的礼包
                boolean success = AGift.getInstance().getGiftManager().editGift(giftId, giftName, contents);
                // 如果编辑成功，发送成功消息给玩家
                if (success) {
                    player.sendMessage(LangHelper.getString("gift.edited"));
                } else {
                    // 如果编辑失败，发送失败消息给玩家
                    player.sendMessage(LangHelper.getString("error.edit_failed"));
                }
            }
        } catch (Exception e) {
            // 捕获异常，发送错误消息给玩家，并在控制台记录错误信息
            player.sendMessage("§c创建礼包时出错: " + e.getMessage());
            AGift.getInstance().getLogger().severe("礼包保存错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
